package com.js.photosdk.enhance;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
public class PhotoEnhance
{
public final int Enhance_Saturation = 0;
public final int Enhance_Brightness = 1;
public final int Enhance_Contrast = 2;
private Bitmap mBitmap;
private float saturationNum = 1.0f;
private float brightNum = 0.0f;
private float contrastNum = 1.0f;
public PhotoEnhance()
{
}
public PhotoEnhance(Bitmap bitmap)
{
this.mBitmap = bitmap;
}
public float getSaturation()
{
return saturationNum;
}
/**
* 设置饱和度 ( 0 ~ 2)
*
* @param saturationNum
* (范围 :0 ~ 255)
*
*/
public void setSaturation(int saturationNum)
{
this.saturationNum = (float) (saturationNum * 1.0f / 128);
}
public float getBrightness()
{
return brightNum;
}
/**
* 设置亮度 (-128 ~ 128 )
*
* @param brightNum
* (范围:0 ~ 255)
*
*/
public void setBrightness(int brightNum)
{
this.brightNum = brightNum - 128;
}
public float getContrast()
{
return contrastNum;
}
/**
* 设置对比度 (0.5 ~ 1.5)
*
* @param contrastNum
* (范围 : 0 ~ 255)
*
*/
public void setContrast(int contrastNum)
{
this.contrastNum = (float) ((contrastNum / 2 + 64) / 128.0);
}
private ColorMatrix mAllMatrix = null;
private ColorMatrix saturationMatrix = null;
private ColorMatrix contrastMatrix = null;
private ColorMatrix brightnessMatrix = null;
public Bitmap handleImage(int type)
{
Bitmap bmp = Bitmap.createBitmap(mBitmap.getWidth(),
mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint();
paint.setAntiAlias(true);
if (mAllMatrix == null)
{
mAllMatrix = new ColorMatrix();
}
/* 饱和度矩阵 */
if (saturationMatrix == null)
{
saturationMatrix = new ColorMatrix();
}
/* 对比度矩阵 */
if (contrastMatrix == null)
{
contrastMatrix = new ColorMatrix();
}
/* 亮度矩阵 */
if (brightnessMatrix == null)
{
brightnessMatrix = new ColorMatrix();
}
switch (type)
{
case Enhance_Saturation :
saturationMatrix.reset();
saturationMatrix.setSaturation(saturationNum);
break;
case Enhance_Brightness :
brightnessMatrix.reset();
brightnessMatrix.set(new float[]{1, 0, 0, 0, brightNum, 0, 1,
0, 0, brightNum, 0, 0, 1, 0, brightNum, 0, 0, 0, 1, 0});
break;
case Enhance_Contrast :
/* 在亮度不变的情况下,提高对比度必定要降低亮度 */
float regulateBright = 0;
regulateBright = (1 - contrastNum) * 128;
contrastMatrix.reset();
contrastMatrix.set(new float[]{contrastNum, 0, 0, 0,
regulateBright, 0, contrastNum, 0, 0, regulateBright,
0, 0, contrastNum, 0, regulateBright, 0, 0, 0, 1, 0});
break;
default :
break;
}
mAllMatrix.reset();
mAllMatrix.postConcat(saturationMatrix);
mAllMatrix.postConcat(brightnessMatrix);
mAllMatrix.postConcat(contrastMatrix);
paint.setColorFilter(new ColorMatrixColorFilter(mAllMatrix));
canvas.drawBitmap(mBitmap, 0, 0, paint);
return bmp;
}
}